Jump to content
  • 0

Почему не выполняется это условие?


Игорь Ермаков
 Share

Question

помогите пожайлуста я зашёл в тупик. вот код

<?php
if (!isset($id))
{
$result = mysql_query("SELECT title,id FROM lessons");
$myrow = mysql_fetch_array($result);
do
{
printf ("<p><a href='edit_lesson.php?id=%s'>%s</a></p>",$myrow['id'],$myrow['title']);
}
while ($myrow = mysql_fetch_array($result));
}
else
{
echo "текст";
}
?>

смысл здесь в том что если не существует переменной id то выполняется цикл в котором делается выборка из тадлицы. так же в этом цикле формируется ссылка на ту же самую страницу только уже не edit_lesson а edit_lesson?id=(переменная id) т.е получается в данном случае переменная id уже существует и должно выполняться обратное условие т.е выводиться текст, но почему то всё равно выполняется первое условие. =\

Link to comment
Share on other sites

21 answers to this question

Recommended Posts

  • 0
Используй пристыковку:

<a href="edit_lesson.php?id='.$myrow['id'].'">'.$myrow['title'].'</a>

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\localhost\www\phpsite\admin\edit_lesson.php on line 24

=\

Link to comment
Share on other sites

  • 0

Во-первых, где коннект к базе? Во-вторых, как справедливо отметил xPoint, не стоит полагаться на register_globals (в PHP6 его вообще отменят к такой-то матрице), надо пользоваться суперглобальными массивами, в данном случае $_GET. Во-третьих, зачем делать отдельный mysql_fetch_array перед циклом, что мешает использовать цикл while? Ну и в-четвертых - нужно быть внимательнее с кавычками в коде, советую юзать редактор с подсветкой, а также хорошенько изучить соотв. раздел мануала :)

Link to comment
Share on other sites

  • 0
Во-третьих, зачем делать отдельный mysql_fetch_array перед циклом, что мешает использовать цикл while?

Я думаю, что ему это не мешает, поскольку такая специфика цикла do-while: сначала выполняется секция do, а после проверяется условие в while.

Padla наверное просто не знает, что в php цикл while может быть без do

Link to comment
Share on other sites

  • 0
приравняй переменную айди к глобальной переменной гет
Имхо, это лишнее действие, можно сразу работать с $_GET['id'].
думаю, что ему это не мешает
Согласен, но лишнее дублирование кода -> необходимость дублировать изменения -> удвоенный риск ошибиться. Лучше по возможности избавляться от этого сразу.
Link to comment
Share on other sites

  • 0
Согласен, но лишнее дублирование кода -> необходимость дублировать изменения -> удвоенный риск ошибиться. Лучше по возможности избавляться от этого сразу.

Дык никто и не спорит об этом. Я просто объяснил зачем был нужен mysql_fetch_array перед циклом

Link to comment
Share on other sites

  • 0
Во-первых, где коннект к базе? Во-вторых, как справедливо отметил xPoint, не стоит полагаться на register_globals (в PHP6 его вообще отменят к такой-то матрице), надо пользоваться суперглобальными массивами, в данном случае $_GET. Во-третьих, зачем делать отдельный mysql_fetch_array перед циклом, что мешает использовать цикл while? Ну и в-четвертых - нужно быть внимательнее с кавычками в коде, советую юзать редактор с подсветкой, а также хорошенько изучить соотв. раздел мануала :angry:

коннект к базе есть не беспокойтесь по идее скрипт работает но не выполняется обратное условие.

а про кавычки: у меня редактор с подсветкой в кавычках я уверен! там просто функция printf она воспринимает 2-ю кавычку как завершение в любой части кода.

Я думаю, что ему это не мешает, поскольку такая специфика цикла do-while: сначала выполняется секция do, а после проверяется условие в while.

Padla наверное просто не знает, что в php цикл while может быть без do

с чего вы взяли?

*ушёл печатать мануал*

Link to comment
Share on other sites

  • 0
с чего вы взяли?

Что взял? То, что в цикле do-while вначале выполняется инструкции в do, а после проверяется условие в while?

Я это взял из мануала по языку php.

Или может быть, то что вы не знаете, что можно использовать цикл while без do?

Я взял это с того, что вы используете цикл do-while в том месте, где эффективнее было бы использовать цикл while. Цикл do-while чаще всего нужен для того, чтобы инструкции в теле цикла выполнились гарантированно один раз. В вашем случае происходит вывод полного списка из таблицы базы. В этом случае лучше использовать цикл while без do, поскольку цикл должен выполниться столько раз, сколько записей находится в таблице.

Link to comment
Share on other sites

  • 0

Я пробовал применить здесь цикл без do, но почему то съедается первый id и вывод начинается только со значения id равного двум.

всем спасибо я нашёл решение оказывается у меня просто что то не то в настройках и нужно было в начале скрипта просто прописать if (isset($_GET['id'])) {$id = $_GET['id'];}

и всё

и правда нужно читать мануал =)

извините. ещё раз всем спасибо.

Link to comment
Share on other sites

  • 0

Так?

$result = mysql_query("SELECT title,id FROM lessons");
while ($myrow = mysql_fetch_array($result))
{
printf ("<p><a href='edit_lesson.php?id=%s'>%s</a></p>",$myrow['id'],$myrow['title']);
}

Должно выводиться все. А что может не по порядку - так надо порядок в самом запросе задавать (ORDER BY)...

Link to comment
Share on other sites

  • 0
Так?

да именно так, но таким образом первый урок не выводится

Должно выводиться все. А что может не по порядку - так надо порядок в самом запросе задавать (ORDER BY)...

к сожалению я не знаю что такое OREDER BY (придётся всё таки осилить мне мануал полностью)

Link to comment
Share on other sites

  • 0

<?php
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id))
{
$result = mysql_query("SELECT title,id FROM lessons");
$myrow = mysql_fetch_array($result);
do
{
printf("<p><a href='edit_lesson.php?id=%s'>%s</a></p>",$myrow['id'],$myrow['title']);
}
while($myrow = mysql_fetch_array($result));
}
else
{
$result = mysql_query("SELECT * FROM lessons WHERE id=$id");
$myrow = mysql_fetch_array($result);
print <<<HERE
<form name="form1" method="post" action="update_lesson.php">
<p>
<label>Введите название урока<br>
<input value="$myrow[title]" type="text" name="title" id="title">
</label>
</p>
<p>
<label>Введите краткое описание урока<br>
<input value="$myrow[meta_d]" type="text" name="meta_d" id="meta_d">
</label>
</p>
<p>
<label>Введите ключевые слова<br>
<input value="$myrow[meta_k]" type="text" name="meta_k" id="meta_k">
</label>
</p>
<p>
<label>Введите дату добавления урока<br>
<input value="$myrow[data]" name="data" type="text" id="data">
</label>
</p>
<p>
<label></label>
<label>Введите краткое описание<br>
<textarea name="description" id="description" cols="55" rows="5">$myrow[description]</textarea>
</label>
</p>
<p>
<label>Введите полный текст урока<br>
<textarea name="text" id="text" cols="55" rows="20">$myrow[text]</textarea>
</label>
</p>
<p>
<label>Введите имя автора урока<br>
<input value="$myrow[author]" type="text" name="author" id="author">
</label>
</p>
<input name="id" type="hidden" value="$myrow[id]">
<p>
<label>
<input type="submit" name="submit" id="submit" value="Сохранить изменения">
</label>
</p>
</form>
HERE;
}
?>

вот код

это только часть его весь код показывать смысла не имеет. можете быть уверены коннект к базе выполнен нормально.

Link to comment
Share on other sites

  • 0

А так

<?php
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id))
{
$result = mysql_query("SELECT title,id FROM lessons");
/*$myrow = mysql_fetch_array($result);
do
{
printf("<p><a href='edit_lesson.php?id=%s'>%s</a></p>",$myrow['id'],$myrow['title']);
}
while($myrow = mysql_fetch_array($result));*/

while ($myrow = mysql_fetch_array($result))
{
printf ("<p><a href='edit_lesson.php?id=%s'>%s</a></p>",$myrow['id'],$myrow['title']);
}
}
else
{
$result = mysql_query("SELECT * FROM lessons WHERE id=$id");
$myrow = mysql_fetch_array($result);
print <<<HERE
<form name="form1" method="post" action="update_lesson.php">
<p>
<label>Введите название урока<br>
<input value="$myrow[title]" type="text" name="title" id="title">
</label>
</p>
<p>
<label>Введите краткое описание урока<br>
<input value="$myrow[meta_d]" type="text" name="meta_d" id="meta_d">
</label>
</p>
<p>
<label>Введите ключевые слова<br>
<input value="$myrow[meta_k]" type="text" name="meta_k" id="meta_k">
</label>
</p>
<p>
<label>Введите дату добавления урока<br>
<input value="$myrow[data]" name="data" type="text" id="data">
</label>
</p>
<p>
<label></label>
<label>Введите краткое описание<br>
<textarea name="description" id="description" cols="55" rows="5">$myrow[description]</textarea>
</label>
</p>
<p>
<label>Введите полный текст урока<br>
<textarea name="text" id="text" cols="55" rows="20">$myrow[text]</textarea>
</label>
</p>
<p>
<label>Введите имя автора урока<br>
<input value="$myrow[author]" type="text" name="author" id="author">
</label>
</p>
<input name="id" type="hidden" value="$myrow[id]">
<p>
<label>
<input type="submit" name="submit" id="submit" value="Сохранить изменения">
</label>
</p>
</form>
HERE;
}
?>

вполне нормально работает.

Link to comment
Share on other sites

  • 0

блин

а я и забыл что выложил эту форму

и гадаю откуда вы взяли эту форму.

сейчас проверим как работает

только я не понял чем же ваш вариант отличается от моего

вы после цикла добавили ещё строчку

while ($myrow = mysql_fetch_array($result))

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy